from moviepy.editor import VideoFileClip, concatenate_videoclips
import os


# 首先使用 os.path.getsize() 函数获取视频文件的大小（以字节为单位）
# 然后使用 get_video_duration() 函数获取视频的时长（以秒为单位）
# 最后，我们将文件大小乘以8（将单位从字节转换为比特）除以视频时长，来计算视频的比特率。
def get_video_bitrate(file_path):
    """
    :param file_path 视频完整路径:
    :return 视频时长
    """
    file_size = os.path.getsize(file_path)  # 获取视频文件大小，单位是字节
    video_duration = VideoFileClip(file_path).duration  # 获取视频时长，单位是秒
    print('视频时长: {} seconds'.format(video_duration))
    video_bitrate = file_size * 8 / video_duration  # 比特率的单位是 bps（比特每秒）
    return video_bitrate


def merge_videos(video_paths, output_path):
    """"
     合并视频
    """
    clips = []
    for path in video_paths:
        clip = VideoFileClip(path)
        clips.append(clip)

    final_clip = concatenate_videoclips(clips)
    final_clip.write_videofile(output_path)


# target_bitrate 的合适值取决于你对视频文件的期望和具体情况，以下是一些一般建议：
# 如果你需要上传视频到视频网站，例如 YouTube，建议压缩后的比特率为 4-6 Mbps（即 4-6 兆比特/秒），这样可以保证高质量的视频和较小的文件大小。这也是 YouTube 推荐的比特率范围，超过这个范围，可能会导致视频压缩后的质量变差或者上传速度变慢。
# 如果你的视频需要在移动设备上播放，也需要考虑视频质量和文件大小的权衡。根据设备和网络速度的不同，建议的比特率范围是 1-2 Mbps。
# 如果你的视频是特定用途或适用于特定场景，也可以根据偏好和需求调整比特率，比如 8 Mbps 或者 10 Mbps。
# 需要注意的是，压缩后的比特率越高，视频质量越好，但文件大小也越大。因此，你需要根据实际需求权衡比特率和文件大小，以达到最佳效果。建议在压缩视频时先尝试不同的比特率值，然后根据实际效果选择合适的值。
def compress_video(input_path, output_path, target_bitrate='2M'):
    video = VideoFileClip(input_path)

    # 在进行视频压缩时，你可以选择保留音频或移除音频。如果你打算保留音频，请确保视频文件中包含音频轨道。如果你想删除音频，请使用without_audio()方法。
    if video.audio is not None:
        audio_clip = video.audio

        # 定义分离的音频文件路径为 后缀变成mp3的output_path
        # 这里其实用os模块来定义路径最好
        audio_clip.write_audiofile('.'.join(output_path.split('.')[:-1]) + '.mp3', codec='mp3')

        # 删除音频轨道
        video = video.without_audio()

    # compressed_video = video.resize(width=1280)  # 调整视频分辨率（可选）
    video.write_videofile(output_path, codec='libx264', audio_bitrate=target_bitrate, fps=video.fps, audio_codec='aac')


# 调用示例
video_paths = [r'E:\CameraSave\2023-12-03\0730.mp4', r'E:\CameraSave\2023-12-03\0740.mp4',
               r'E:\CameraSave\2023-12-03\0750.mp4', r'E:\CameraSave\2023-12-03\0800.mp4']
output_path = r'E:\CameraSave\2023-12-03\0730-0800.mp4'
final_path = r'd:\pdf\a1.mp4'

# # 合并视频
# merge_videos(video_paths, output_path)
#
# # 压缩视频
# compress_video(output_path, final_path)

vedio_path = r'd:\pdf\a1.mp4'
vedio_path2 = r'd:\pdf\a3.mp4'

# 查看视频比特率
video_bitrate = get_video_bitrate(vedio_path)
print(video_bitrate)

video_bitrate = get_video_bitrate(vedio_path2)
print(video_bitrate)